package com.cg.asm.core.domain.vo.user;

import com.cg.asm.core.domain.vo.menu.MenuPointsVO;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

/**
 * 用户登录视图对象
 * 使用场景:
 * 1.用户登录成功后，将此对象返回到前端
 *
 * @author yuzhenjing
 * @date 2018/8/30 下午4:36
 */
@Data
public class UserLoginVO implements UserDetails {

    /**
     * 用户Id
     */
    private String userId;
    /**
     * 用户头像
     */
    private String userPortrait;
    /**
     * 用户名
     */
    private String username;
    /**
     * 姓名
     */
    private String personName;
    /**
     * 用户姓别
     */
    private String userGender;
    /**
     * 用户密码
     */
    private String password;
    /**
     * 用户部门
     */
    private String orgName;
    /**
     * 电子邮箱
     */
    private String userEmail;
    /**
     * 手机号码
     */
    private String userPhone;
    /**
     * 用户固定电话
     */
    private String userFixedTelephone;
    /**
     * 用户分组Id
     */
    private String userGroupId;
    /**
     * 是否启用
     */
    private boolean isEnabled;
    /**
     * 帐户类别
     */
    private String accountType;
    /**
     * 用户角色
     */
    private List<String> roles;
    /**
     * 用户功能点信息
     */
    private List<MenuPointsVO> userPoints;
    /**
     * 锁定日期
     */
    private String lockDate;
    /**
     * 登陆错误次数
     */
    private Integer errorLoginNumber;

    @JsonIgnore
    @Override
    public boolean isAccountNonExpired() {
        return true;
    }

    @JsonIgnore
    @Override
    public boolean isAccountNonLocked() {
        return true;
    }

    @JsonIgnore
    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }

    @JsonIgnore
    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        List<GrantedAuthority> authorities = new ArrayList<>();
        if (null != roles && roles.size() != 0) {
            for (String roleId : roles) {
                authorities.add(new SimpleGrantedAuthority(roleId));
            }
        }
        return authorities;
    }
}
